/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include "节点/节点.h"



class API_EXPORT C_渲染器配置节点 : public C_节点基类 {
	S_纹理* m_渲染纹理;

public:
	C_渲染器配置节点(S_设备环境& ctx);
	~C_渲染器配置节点();

	S_Props m_分辨率;
	S_Props m_光反弹;
	S_Props m_光采样;
	S_Props m_采样;
	S_Props m_瓦片渲染;
	S_Props m_瓦片大小;
	S_Props m_开启运动模糊;
	S_Props m_运动模糊采样;
	S_Props m_运动模糊时间;


	S_Props m_输出图层;
	S_Props m_自定义物体输出;

	S_Props m_渲染世界;
	S_Props m_场景遮罩;

	GLSL_RenderFrame	m_帧渲染参数;


	bool	f_update();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);

	S_渲染世界*	f_更新世界(S_Scene* scene);
};
API_EXPORT C_节点基类* f_node_创建渲染器配置节点(S_设备环境& ctx, C_节点树* 子节点树);
API_EXPORT C_节点基类* f_node_加载渲染器配置节点(S_设备环境& ctx, FILE* f);
API_EXPORT void f_node_保存渲染器配置节点(C_节点基类* n, FILE* f);





class API_EXPORT C_图像降噪节点 : public C_节点基类 {
	//OIDNDevice m_device;
	S_纹理*		m_输出纹理;
	S_板载缓存*	m_临时缓存;
public:
	C_图像降噪节点(S_设备环境& ctx);
	~C_图像降噪节点();

	S_Props m_加速计算方式;
	S_Props m_开启HDR;


	bool	f_update();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);

};
API_EXPORT C_节点基类* f_node_创建图像降噪节点(S_设备环境& ctx, C_节点树* 子节点树);
API_EXPORT C_节点基类* f_node_加载图像降噪节点(S_设备环境& ctx, FILE* f);
API_EXPORT void f_node_保存图像降噪节点(C_节点基类* n, FILE* f);




class API_EXPORT C_渲染图层节点 : public C_节点基类 {
public:
	C_渲染图层节点(S_设备环境& ctx);
	~C_渲染图层节点();

	S_Props m_图层类型;

	bool	f_update();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);

};
API_EXPORT C_节点基类* f_node_创建渲染图层节点(S_设备环境& ctx, C_节点树* 子节点树);
API_EXPORT C_节点基类* f_node_加载渲染图层节点(S_设备环境& ctx, FILE* f);
API_EXPORT void f_node_保存渲染图层节点(C_节点基类* n, FILE* f);



class API_EXPORT C_渲染输出节点 : public C_节点基类 {
public:
	C_渲染输出节点(S_设备环境& ctx);
	~C_渲染输出节点();

	S_Props m_相对路径;
	S_Props m_颜色通道;
	S_Props m_写入方式;
	S_Props m_位深;
	S_Props m_格式;
	

	bool	f_update();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);

};
API_EXPORT C_节点基类* f_node_创建渲染输出节点(S_设备环境& ctx, C_节点树* 子节点树);
API_EXPORT C_节点基类* f_node_加载渲染输出节点(S_设备环境& ctx, FILE* f);
API_EXPORT void f_node_保存渲染输出节点(C_节点基类* n, FILE* f);




class API_EXPORT C_渲染世界节点 : public C_节点基类 {
public:
	C_渲染世界节点(S_设备环境& ctx);
	~C_渲染世界节点();

	S_Props m_初始渲染层;


	bool	f_update();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);

};
API_EXPORT C_节点基类* f_node_创建渲染世界节点(S_设备环境& ctx, C_节点树* 子节点树);
API_EXPORT C_节点基类* f_node_加载渲染世界节点(S_设备环境& ctx, FILE* f);
API_EXPORT void f_node_保存渲染世界节点(C_节点基类* n, FILE* f);




